package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.NzjclEntryInfo;
import com.ruoyi.basebill.DTO.NzjclInfo;
import com.ruoyi.basebill.domain.WfzNzjjt;
import com.ruoyi.basebill.domain.WfzNzjjtentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzNzjchentry;
import com.ruoyi.basebill.mapper.WfzNzjchMapper;
import com.ruoyi.basebill.domain.WfzNzjch;
import com.ruoyi.basebill.service.IWfzNzjchService;

/**
 * 冲回年终奖Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-13
 */
@Service
public class WfzNzjchServiceImpl implements IWfzNzjchService 
{
    @Autowired
    private WfzNzjchMapper wfzNzjchMapper;

    /**
     * 查询冲回年终奖
     * 
     * @param fid 冲回年终奖主键
     * @return 冲回年终奖
     */
    @Override
    public WfzNzjch selectWfzNzjchByFid(Long fid)
    {
        return wfzNzjchMapper.selectWfzNzjchByFid(fid);
    }

    /**
     * 查询冲回年终奖列表
     * 
     * @param wfzNzjch 冲回年终奖
     * @return 冲回年终奖
     */
    @Override
    public List<WfzNzjch> selectWfzNzjchList(WfzNzjch wfzNzjch)
    {
        return wfzNzjchMapper.selectWfzNzjchList(wfzNzjch);
    }

    /**
     * 新增冲回年终奖
     * 
     * @param wfzNzjch 冲回年终奖
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzNzjch(WfzNzjch wfzNzjch)
    {
        int rows = wfzNzjchMapper.insertWfzNzjch(wfzNzjch);
        insertWfzNzjchentry(wfzNzjch);
        return rows;
    }

    /**
     * 修改冲回年终奖
     * 
     * @param wfzNzjch 冲回年终奖
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzNzjch(WfzNzjch wfzNzjch)
    {
        wfzNzjchMapper.deleteWfzNzjchentryByFparentid(wfzNzjch.getFid());
        insertWfzNzjchentry(wfzNzjch);
        return wfzNzjchMapper.updateWfzNzjch(wfzNzjch);
    }

    /**
     * 批量删除冲回年终奖
     * 
     * @param fids 需要删除的冲回年终奖主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjchByFids(Long[] fids)
    {
        wfzNzjchMapper.deleteWfzNzjchentryByFparentids(fids);
        return wfzNzjchMapper.deleteWfzNzjchByFids(fids);
    }

    /**
     * 删除冲回年终奖信息
     * 
     * @param fid 冲回年终奖主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzNzjchByFid(Long fid)
    {
        wfzNzjchMapper.deleteWfzNzjchentryByFparentid(fid);
        return wfzNzjchMapper.deleteWfzNzjchByFid(fid);
    }

    @Override
    public String importNzjch(WfzNzjch wfzNzjch) {
        NzjclInfo nzjchInfo = new NzjclInfo();
        String fnumber = wfzNzjch.getFnumber(); //单据编码
        String fcompany = wfzNzjch.getFcompany(); //公司
        String fperiod = wfzNzjch.getFperiod();//薪酬期间
        String fvourtype = wfzNzjch.getFvourtype(); //凭证字


        nzjchInfo.setNumber(fnumber);
        nzjchInfo.setCompany(fcompany);
        nzjchInfo.setPeriod(fperiod);
        nzjchInfo.setVourType(fvourtype);
        nzjchInfo.setSourcebillid(String.valueOf(wfzNzjch.getFid()));

        List<WfzNzjchentry> wfzNzjchentryList = wfzNzjch.getWfzNzjchentryList();
        ArrayList<NzjclEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzNzjchentryList.size();j++){
            WfzNzjchentry wfzNzjchentry = wfzNzjchentryList.get(j);
            String fcostnumber = wfzNzjchentry.getFcostnumber();//成本中心
            BigDecimal fnzj = wfzNzjchentry.getFnzj();//年终奖
            String fcostcompany = wfzNzjchentry.getFcostcompany();//成本中心所属财务组织
            String fjzcompany = wfzNzjchentry.getFjzcompany();//记账公司
            String fjsfs = wfzNzjchentry.getFjsfs();//组织间结算方式
            String fcbzxxz = wfzNzjchentry.getFcbzxxz();//成本中心属性
            String fvourtype1 = wfzNzjchentry.getFvourtype();//凭证字


            NzjclEntryInfo nzjchEntryInfo = new NzjclEntryInfo();
            nzjchEntryInfo.setCostCenter(fcostnumber);
            nzjchEntryInfo.setNzj(fnzj);
            nzjchEntryInfo.setCostcompany(fcostcompany);
            nzjchEntryInfo.setJzcompany(fjzcompany);
            nzjchEntryInfo.setJsfs(fjsfs);
            nzjchEntryInfo.setCbzxxz(fcbzxxz);
            nzjchEntryInfo.setVourType(fvourtype1);


            entry.add(nzjchEntryInfo);

        }

        nzjchInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(nzjchInfo);

        return json;
    }

    /**
     * 新增冲回年终奖分录信息
     * 
     * @param wfzNzjch 冲回年终奖对象
     */
    public void insertWfzNzjchentry(WfzNzjch wfzNzjch)
    {
        List<WfzNzjchentry> wfzNzjchentryList = wfzNzjch.getWfzNzjchentryList();
        Long fid = wfzNzjch.getFid();
        if (StringUtils.isNotNull(wfzNzjchentryList))
        {
            List<WfzNzjchentry> list = new ArrayList<WfzNzjchentry>();
            for (WfzNzjchentry wfzNzjchentry : wfzNzjchentryList)
            {
                wfzNzjchentry.setFparentid(fid);
                list.add(wfzNzjchentry);
            }
            if (list.size() > 0)
            {
                wfzNzjchMapper.batchWfzNzjchentry(list);
            }
        }
    }
}
